using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using User.Domain.Entities;
using User.Domain.ValueObjects;

namespace User.Infrastructure
{
    public class UserDbContext : DbContext
    {
        public UserDbContext()
        {
        }
        public UserDbContext(DbContextOptions<UserDbContext> options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // 配置 UserItem 实体
            modelBuilder.ApplyConfiguration(new Configurations.UserConfiguration());

            // 其他实体配置...

            // 如果需要，可以在这里添加更多的值对象转换器
            // 例如 PasswordHash 的转换器示例
           /*  var converter = new ValueConverter<PasswordHash, string>(
                v => v.ToString(), // 保存到数据库：取内部 string
                v => PasswordHash.FromPlainText(v) // 从数据库构造值对象（如果 ctor 是私有，可用工厂或反射）
             );

             modelBuilder.Entity<UserItem>(b =>
             {
                 b.Property(u => u.PasswordHash)
                  .HasConversion(converter)
                  .HasColumnName("PasswordHash")
                  .IsRequired();
             }); */
            base.OnModelCreating(modelBuilder);
            
        }

        // DbSet properties for your entities
        public DbSet<UserProfile> UserProfiles { get; set; }
    }
}